/*
sort

Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 34476    Accepted Submission(s): 10222


Problem Description
给你n个整数，请按从大到小的顺序输出其中前m大的数。
 

Input
每组测试数据有两行，第一行有两个数n,m(0<n,m<1000000)，第二行包含n个各不相同，且都处于区间[-500000,500000]的整数。
 

Output
对每组测试数据按从大到小的顺序输出前m大的数。
 

Sample Input
5 3
3 -35 92 213 -644
 

Sample Output
213 92 3
 */
package com.yuan.algorithms.base01;

import java.io.BufferedInputStream;
import java.util.Scanner;

/**
 * @author YouYuan
 * @eMail E-mail:1265161633@qq.com
 * @Time 创建时间：2015年8月5日 上午10:49:28
 * @Explain 说明:利用哈希表的思想，直接将数据存储在相应的下标中，避免了排序。
 */
public class HDU1425_sort {

	static int MAXN = 1000010;
	static int SIZE = 500000;
//	static boolean[] hash = new boolean[MAXN];
	static boolean[] hash;
	static Scanner in = new Scanner(new BufferedInputStream(System.in));

	public static void main(String[] args) {
		while (in.hasNext()) {
			int n = in.nextInt();
			int m = in.nextInt();
			hash = new boolean[MAXN];
			for (int i = 0; i < n; i++) {
				int num = in.nextInt();
				hash[SIZE + num] = true;
			}
			for (int i = MAXN - 1, j = 0; i >= 0 && j < m; i--) {
				if (hash[i]) {
					if (j==m - 1) {
						System.out.println(i - SIZE);
					}else {
						System.out.print((i - SIZE) + " ");
					}
					++j;
				}
			}
//			for (int i = 0; i < hash.length; i++) {
//				hash[i] = false;
//			}
		}
	}

}
